package com.baoyouqun.domain.Enum;

import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Getter;

/**
 * 资源类型分类枚举类
 * 对应数据库表 resource_type 中的 type_category 字段，包含数据库存储值和显示名称
 */
@Getter
@JsonFormat(shape = JsonFormat.Shape.OBJECT)
public enum ResourceTypeEnum {

    /**
     * 拥有的资源（如：用户已持有的金币、钻石等）
     * value：数据库存储值（与ENUM('own', 'need')对应）
     * name：显示名称（用于前端展示或日志输出）
     */
    OWN("own", "拥有的资源"),

    /**
     * 需要的资源（如：用户需求的金币、钻石等）
     */
    NEED("need", "需要的资源");

    // Getter方法
    /**
     * 数据库存储值（与数据库ENUM类型保持一致）
     */
    @EnumValue
    private final String value;

    /**
     * 显示名称（中文名称，用于前端展示或业务说明）
     */
    private final String name;

    // 构造方法：初始化数据库存储值和显示名称
    ResourceTypeEnum(String value, String name) {
        this.value = value;
        this.name = name;
    }

    /**
     * 根据数据库存储值转换为枚举对象
     *
     * @param value 数据库中的值（'own' 或 'need'）
     * @return 对应的枚举对象
     * @throws IllegalArgumentException 当值不匹配时抛出
     */
    public static ResourceTypeEnum valueOfDbValue(String value) {
        for (ResourceTypeEnum category : values()) {
            if (category.value.equals(value)) {
                return category;
            }
        }
        throw new IllegalArgumentException("无效的资源类型分类值：" + value);
    }

}
    